home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / dev / scutils.c < prev    next >
C/C++ Source or Header  |  1990-12-19  |  3KB  |  109 lines

  1.  
  2. /*
  3.  * @(#)scutils.c 1.1 86/09/27
  4.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  5.  */
  6.  
  7. #include "../h/globram.h"
  8. #include "../sun3/structconst.h"
  9. #include "../sun3/cpu.addrs.h"
  10. #include "../sun3/cpu.map.h"
  11. #include "../h/pginit.h"
  12. #define    u_short    unsigned short
  13. #define    u_char    unsigned char
  14. #define    u_int        unsigned int
  15. #include "../sun3/memreg.h"
  16. #include "../dev/cg2reg.h"
  17. #include "../h/eeprom.h"
  18.  
  19. #define    TEMP_PAGE ((unsigned short *)(VIDEOMEM_BASE))
  20. #define    ENA_VIDEO    0x08
  21. #define DIAGSW            0x01
  22.  
  23. struct pginit colorzap[] = {
  24.     {VIDEOMEM_BASE, 1,        /* Video memory */
  25.         {1, PMP_ALL, VPM_VME_COLOR, 0, 0, VMEPG_COLOR}},
  26.     {((char *)VIDEOMEM_BASE)+128*1024, PGINITEND,
  27.         {0, PMP_RO_SUP, VPM_MEMORY, 0, 0, 0}},
  28. };
  29.  
  30. struct cg2statusreg zero_statreg = {0};
  31.  
  32. /* ======================================================================
  33.    Author : Peter Costello & John Gilmore
  34.    Date   : April 21, 1982 & August 6, 1984
  35.    Purpose : This routine initializes the color board. It clears the 
  36.     frame buffer to color 0, enables all video planes, loads the 
  37.     default color map, and enables video.
  38.    Error Handling: Returns -1 if no color board.
  39.    Returns: 1 if color board config is 1024x1024, 0 if 1152x900.
  40.        -1 if no color board.
  41.    ====================================================================== */
  42.  
  43. int
  44. init_scolor()
  45. {
  46.     register unsigned short *cmp, *endp;
  47.     register unsigned short *reg = TEMP_PAGE;
  48.     register struct cg2statusreg *statreg =
  49.         (struct cg2statusreg *)(TEMP_PAGE + COLOR_STAT_PME_OFF);
  50.     long oldpgmap;
  51.     int result;
  52.  
  53.     set_enable(get_enable() | ENA_VIDEO);   /* turn on video */
  54.     oldpgmap = getpgmap(reg);
  55.  
  56.     if ((EEPROM->ee_diag.eed_console < EED_CONS_TTYA || 
  57.             EEPROM->ee_diag.eed_console > EED_CONS_COLOR) &&
  58.             (get_enable() & DIAGSW) == 0)
  59.                 return -1; 
  60.     /* 
  61.      * Initialize status register just in case, and check for
  62.      * whether the board really exists.
  63.      */
  64.     setpgmap(reg, PME_COLOR_STAT);
  65.  
  66.     if (peek(reg) == -1) {
  67.         setpgmap(reg, oldpgmap);        /* Restore temp page */
  68.         result = -1;
  69.     } else {
  70.         setpgmap(reg, PME_COLOR_MAPS);     /* Set up Color Maps */
  71.  
  72.         cmp = (unsigned short *)(reg + COLOR_MAPS_PME_OFF);
  73.         endp = cmp + 256*3;
  74.  
  75.         while (cmp < endp) {
  76.             *cmp++ = -1;
  77.             *cmp++ = 0;
  78.         }
  79.  
  80.         setpgmap(statreg, PME_COLOR_STAT);
  81.                 statreg->update_cmap = 1;
  82.                 while ( (statreg->retrace));            /* See retrace */
  83.                 while (!(statreg->retrace));            /* End of retrace */
  84.                 while ( (statreg->retrace));            /* Start of next one */
  85.                 statreg->update_cmap = 0;
  86.  
  87.         setpgmap(reg, PME_COLOR_ZOOM);
  88.         *(short *)(reg + COLOR_ZOOM_PME_OFF) = 0;
  89.         setpgmap(reg, PME_COLOR_WPAN);
  90.         *(short *)(reg + COLOR_WPAN_PME_OFF) = 0;
  91.         setpgmap(reg, PME_COLOR_PPAN);
  92.         *(short *)(reg + COLOR_PPAN_PME_OFF) = 0;
  93.         setpgmap(reg, PME_COLOR_VZOOM);
  94.         *(short *)(reg + COLOR_VZOOM_PME_OFF) = 0xFF;
  95.         setpgmap(reg, PME_COLOR_MASK);
  96.                 *(short *)(reg + COLOR_MASK_PME_OFF) = 0x01;
  97.  
  98.         setpgmap(reg, PME_COLOR_STAT);
  99.         *statreg = zero_statreg;    /* Clear status register */
  100.         statreg->video_enab = 1;    /* Enable video */
  101.         result = 0;            /* Tell caller if 1024x1024 */
  102.         if (statreg->resolution)
  103.             result = 1;
  104.         setupmap(colorzap);    /* map in color buffer */
  105.     }
  106.     return result;
  107. }
  108.  
  109.